package app.dis.modelo;

import javax.persistence.Entity;
import java.io.Serializable;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Column;
import javax.persistence.Version;
import java.lang.Override;
import app.dis.modelo.Rol;
import javax.persistence.ManyToOne;
import app.dis.modelo.Cuenta;
import java.util.Set;
import java.util.HashSet;
import javax.persistence.OneToMany;

@Entity
public class Cliente implements Serializable
{

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name = "cedula", updatable = false, nullable = false)
   private Long cedula = null;

   @Column
   private String nombre;

   @Column
   private String apellido;

   
   @Column
   private String contrasena;
   
   @Column
   private String correo;
   
   @ManyToOne
   private Rol rol;

   @OneToMany
   private Set<Cuenta> cuentas = new HashSet<Cuenta>();


   
   
   public Long getCedula() {
	return cedula;
   	}

	public void setCedula(Long cedula) {
		this.cedula = cedula;
	}

@Override
   public boolean equals(Object that)
   {
      if (this == that)
      {
         return true;
      }
      if (that == null)
      {
         return false;
      }
      if (getClass() != that.getClass())
      {
         return false;
      }
      if (cedula != null)
      {
         return cedula.equals(((Cliente) that).cedula);
      }
      return super.equals(that);
   }

   @Override
   public int hashCode()
   {
      if (cedula != null)
      {
         return cedula.hashCode();
      }
      return super.hashCode();
   }

   public String getNombre()
   {
      return this.nombre;
   }

   public void setNombre(final String nombre)
   {
      this.nombre = nombre;
   }

   public String getApellido()
   {
      return this.apellido;
   }

   public void setApellido(final String apellido)
   {
      this.apellido = apellido;
   }
   
   

   public String getContrasena() {
	return contrasena;
}

public void setContrasena(String contrasena) {
	this.contrasena = contrasena;
}



public String getCorreo() {
	return correo;
}

public void setCorreo(String correo) {
	this.correo = correo;
}

@Override
   public String toString()
   {
      String result = getClass().getSimpleName() + " ";
      
      if (nombre != null && !nombre.trim().isEmpty())
         result += "nombre: " + nombre;
      if (apellido != null && !apellido.trim().isEmpty())
         result += ", apellido: " + apellido;
      if (correo != null && !correo.trim().isEmpty())
          result += ", correo: " + correo;
      return result;
   }

   public Rol getRol()
   {
      return this.rol;
   }

   public void setRol(final Rol rol)
   {
      this.rol = rol;
   }

   public Set<Cuenta> getCuentas()
   {
      return this.cuentas;
   }

   public void setCuentas(final Set<Cuenta> cuentas)
   {
      this.cuentas = cuentas;
   }
}